/**
 * 初始化分页控件
 * ctrlId：分页控件ID
 * formId：form表单ID，注意该参数需要配合input框使用，input的id必须为page_no
 * postUrl：post请求url，没有postUrl就默认使用form表单提交
 * postData：post请求参数
 * callBack：回调函数，直接把返回的数据放进去，自己拼接数据
 * callTable：回调表格，与columns配合使用
 * columns：回调表格对应列，与callTable配合使用
 */
function initPageTool(option) {
	const pageTool = $("#" + option.ctrlId);
	if (pageTool === undefined) {
		return;
	}
	// 获取参数
	let pageNo = getToolValue(pageTool, "page_no");
	let pageSize = getToolValue(pageTool, "page_size");
	const totalNum = getToolValue(pageTool, "total_num");

	const totalPage = Math.ceil(totalNum / pageSize);
	// 加载页面
	let toolHtml = '<a class="page-btn prev-page">上一页</a>';
	for (let i = 1; i <= totalPage; i++) {
		if (i === pageNo) {
			toolHtml += '<a class="page-btn page-curr">' + i + '</a>';
		} else if (i === 1 || (i >= pageNo - 2 && i <= pageNo + 2) || i > totalPage - 1) {
			toolHtml += '<a class="page-btn">' + i + '</a>';
		} else if (!toolHtml.endsWith("•••</span>")) {
			toolHtml += '<span class="page-dot">•••</span>';
		}
	}
	toolHtml += '<a class="page-btn next-page">下一页</a>';
	toolHtml += '<span class="page-text">共 ' + totalPage + ' 页&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;转到第</span>';
	toolHtml += '<input class="page-input" type="text" onkeyup="checkInputNum(this)" onafterpaste="checkInputNum(this)" value="' + pageNo + '">';
	toolHtml += '<span class="page-text">页</span><button class="page-btn page-btn-goto">确定</button>';
	toolHtml += '<span class="yz-err-msg"></span>';
	pageTool.html(toolHtml);
	// 控制上下页
	if (pageNo <= 1) {
		pageTool.find('.prev-page').attr('disabled', 'disabled').addClass('page-btn-dis');
	}
	if (pageNo >= totalPage) {
		pageTool.find('.next-page').attr('disabled', 'disabled').addClass('page-btn-dis');
	}

	// 监听事件
	pageTool.find('.page-btn').on('click', function() {
		let goPageNo;
		if ($(this).hasClass('page-curr') || $(this).hasClass('page-btn-dis')) {
			return;
		} else if ($(this).hasClass('prev-page')) {
			goPageNo = pageNo - 1;
		} else if ($(this).hasClass('next-page')) {
			goPageNo = pageNo + 1;
		} else if ($(this).hasClass('page-btn-goto')) {
			const num = pageTool.find(".page-input").val();
			if (num === undefined || num === '') {
				pageTool.find(".yz-err-msg").html("页码不能为空！");
				pageTool.find(".page-input").val(pageNo);
				return;
			}
			goPageNo = parseInt(num);
			if (goPageNo < 1 || goPageNo > totalPage) {
				pageTool.find(".yz-err-msg").html("页码必须在【" + 1 + "~" + totalPage + "】之间");
				pageTool.find(".page-input").val(pageNo);
				return;
			}
			if (goPageNo === pageNo) {
				return;
			}
		} else {
			goPageNo = parseInt($(this).html());
		}
		// 判断有没有请求链接，如果没有就提交form
		if (option.postUrl === undefined || option.postUrl === '') {
			$("#page_no").val(goPageNo);
			$('#' + option.formId).submit();
		} else {
			// 处理请求数据
			let postData = option.postData === undefined ? {} : option.postData;
			postData.pageNo = goPageNo;
			postData.pageSize = pageSize;
			// 发起post请求
			$.post(option.postUrl, postData, function(data) {
				if (option.callBack !== undefined) {
					// 如果有定义callback函数
					option.callBack(data);
				} else if (option.callTable !== undefined && option.columns !== undefined) {
					// 如果有定义tableId，则按默认处理
					let innerHtml = "<tr>"
					$(data.resultList).each(function(index, element) {
						innerHtml += "<tr>"
						for (let i = 0; i < option.columns.length; i++) {
							innerHtml += "<td>" + element[option.columns[i]] + "</td>";
						}
						innerHtml += "</tr>"
					});
					$("#" + option.callTable).find("tbody").html(innerHtml);
				} else {
					pageTool.find(".yz-err-msg").html("回调失败，没有回调方法");
				}
				// 刷新控件
				pageTool.attr("page_no", goPageNo);
				initPageTool(option);
			});
		}
	});

}

function getToolValue(pageTool, name) {
	let value = pageTool.attr(name);
	if (value === undefined) {
		value = $('#' + name).val();
	}
	if (value === undefined) {
		return 0;
	}
	return parseInt(value);
}

function checkInputNum(numInput) {
	numInput.value = numInput.value.replace(/[^\d]/g, "");
}

// initPageTool();
